// 字符串常用API

const str = '2 + 2'; // 字符串字面量
const strObj = new String('2 + 2'); // String 对象
console.log(str === strObj);

str.length; // 字符串的长度
// 也可以通过索引值，来获取对应位置的字符（常用于明确知道目标字符串的具体索引位置）
str[0]; // 2
str.charAt(0); // 2 与上面直接通过 [索引值] 取字符串等价
str[2]; // +
str.charAt(2) // + 与上面一行等价
str[4]; // 2
str.charAt(4); // 2 与上面一行等价

// 下面两个函数作用相同：用来获取（指定索引位置）字符的 UTF-16码
str.charCodeAt(0) // 50
str.codePointAt(0) // 50

// 下面两个函数作用相同：通过utf-16码，返回对应的字符串
String.fromCharCode()
String.fromCodePoint()


// 从左往右依次查找传入的字符串的索引值（常用于不知道目标字符串的索引位置）
str.indexOf('2'); // 0
str.indexOf('+'); // 2
str.indexOf('2', 1); // 4, 第二个参数可以改变（开始查找索引值）的初始位置

// 从右往左依次查找传入的字符串的索引值（常用于不知道目标字符串的索引位置）
str.lastIndexOf('2'); // 4
str.lastIndexOf('+'); // 2
str.lastIndexOf('2', str.length - 1 - 1); // 0

// 通过正则来查找字符串的索引值
str.search(/2/g); // 返回对应的索引值

let str = '大家好';
// 参数中的字符串，比如完全存在与str中，以下三个API才可能返回true
// startsWith 用来判断字符串开头的字符串，是否与传入的字符串参数一致
str.startsWith('大'); // true
str.startsWith('大家'); // true
str.startsWith('家'); // false
// endsWith 用来判断字符串结尾的字符串，是否与传入的字符串参数一致
str.endsWith('好'); // true
str.endsWith('家好'); // true
str.endsWith('家'); // false
// includes 用来判断，字符串中是否包含，传入的字符串
str.includes('大'); // true
str.includes('大家'); // true
str.includes('家'); // true
str.includes('大好'); // false
str.includes('大哥好'); // false

// 在原本字符串的基础上，追加参数中的字符串，并且返回一个新的字符串
str.concat('123'); // str + '123'; 等价

// 会将字符串按照参数中的字符进行分割，并返回分割后的字符串数组
'1,2,3,4,5,6'.split(','); // ['1', '2', '3', '4', '5', '6']

// 会将字符串，按照传入的（开始下标 包含）和（结束下标 不包含）进行截取，并返回截取出来的字符串
'0123456789'.slice(3, 6); // '345'

// 通过以下方法截取目标字符串
str = 'The quick brown fox jumps over the lazy dog.';
let startIndex = str.indexOf('quick')
let endIndex = startIndex + 'quick'.length;
str.slice(startIndex, endIndex) // 'quick'

// 会将字符串，按照传入的（开始下标 包含）和（结束下标 不包含）进行截取，并返回截取出来的字符串
str.substring(startIndex, endIndex)

// 上面两个API如果endIndex结束下标，没传的话，endIndex = 原始字符串的长度

// 通过参数中的正则，提取字符串中符合正则的字符串数组，如果没有匹配到任何字符，则返回null
str.match(/e/g) // ['e', 'e', 'e']

// 找到与第一个参数完全相同的字符串，并替换成第二个参数的字符串
str.replace('quick', 'slow') // 'The slow brown fox jumps over the lazy dog.'

// 将字符串中所有的大写字母，改为小写字母
str.toLowerCase() // 'the quick brown fox jumps over the lazy dog.'

// 将字符串中所有的小写字母，改为大写字母
str.toUpperCase() // 'THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.'

const str1 = '1';
// 将字符串重复指定次数并返回新的字符串
str1.repeat(3); // '111'

// 应用于账户密码的输入
// 用户名[ Admin]
// 密码：[123456 ]
// trim 去掉字符串开头和结尾的空格
const username = '    Admin';
username.trim(); // 'Admin';
const password = '123456    ';
password.trim(); // ‘123456’

const phone = '180 5323 6686';
phone.replace(/\s+/g, ''); // '18053236686'
const phone2 = '   180 5 3 23  6 6 86    ';
phone2.replace(/\s+/g, ''); // '18053236686'

